#ifndef DRAWABLE__H
#define DRAWABLE__H

#include <SDL.h>



// Drawable is an Abstract Base Class (ABC) that
// specifies the methods that derived classes may
// and must have.
class Drawable {
public:
  explicit Drawable(float x, float y, float xs, float ys) : 
    xCoordinate(x), yCoordinate(y), xSpeed(xs), ySpeed(ys),
    initSpeedX(xSpeed), initSpeedY(ySpeed) { }

  explicit Drawable(const Drawable& s) :
    xCoordinate(s.xCoordinate), yCoordinate(s.yCoordinate),
    xSpeed(s.xSpeed), ySpeed(s.ySpeed),
    initSpeedX(xSpeed), initSpeedY(ySpeed) { }

  virtual ~Drawable() {}

  virtual void draw() const = 0;
  virtual void update(Uint32 ticks) = 0;


  float getX() const { return xCoordinate; }
  float getY() const { return yCoordinate; }
  void setX(float x) { xCoordinate = x; }
  void setY(float y) { yCoordinate = y; }

  float getYSpeed() const { return ySpeed; }
  float getXSpeed() const { return xSpeed; }
  void setXSpeed(float xs) { xSpeed = xs; }
  void setYSpeed(float ys) { ySpeed = ys; }

private:
  float xCoordinate;
  float yCoordinate;
  float xSpeed;
  float ySpeed;
  const float initSpeedX;
  const float initSpeedY;
};
#endif
